Производные `S^w(u,v)` вычисляются по формулам (3.17) - (3.24). Выведем теперь формулы для производных `S(u,v)` с точки зрения тех `S^w(u,v)`. Пусть
`S(u,v)={w(u,v)S(u,v)}/{w(u,v)}={A(u,v)}/{w(u,v)}`
где `A(u,v)` является числителем `S(u,v)` ( уравнение [4.11]). Затем`S_α(u,v)=(A_α(u,v)-w_α(u,v)S(u,v))/{w(u,v)}`(4.19)
где `α` обозначает либо `u` или `v`.В целом
`A^{(k,l)}=[(wS)^k]^l=(sum_(i=0)^k((k),(i))w^{(i,0)}S^{(k-i,0)})^l=sum_(i=0)^k((k),(i))sum_(j=0)^l((l),(j))w^{(i,j)}S^{(k-i,l-j)}` `=w^{(0,0)}S^{(k,l)}+sum_(i=1)^k((k),(i))w^{(i,0)}S^{(k-i,l)}+sum_(j=1)^l((l),(j))w^{(0,j)}S^{(k,l-j)}` `+sum_(i=1)^k((k),(i))sum_(j=1)^l((l),(j))w^{(i,j)}S^{(k-i,l-j)}`
и отсюда следует, что`S^{(k,l)}=1/w(A^{(k,l)}-sum_(i=1)^k((k),(i))w^{(i,0)}S^{(k-i,l)}-sum_(j=1)^l((l),(j))w^{(0,j)}S^{(k,l-j)}` `-sum_(i=1)^k((k),(i))sum_(j=1)^l((l),(j))w^{(i,j)}S^{(k-i,l-j)})`(4.20)
Из уравнения (4.20), получаем`S_{uv}=(A_{uv}-w_{uv} S-w_u S_v-w_v S_u)/w`(4.21)
`S_{u u}=(A_{u u}-2w_uS_u-w_{u u}S)/w`(4.22)
`S_{v v}=(A_{v v}-2w_vS_v-w_{v v}S)/w`(4.23)
Из уравнений (3.24), (4.19) и (4.20)`S_u(0,0)=p/u_(p+1)w_{1,0}/w_{0,0}(P_{1,0}-P_{0,0})`(4.24)
`S_v(0,0)=q/v_(q+1)w_{0,1}/w_{0,0}(P_{0,1}-P_{0,0})`(4.25)
`S_{uv}(0,0)={pq}/(w_{0,0}u_(p+1)v_(q+1))(w_{1,1}P_{1,1}-(w_{1,0}w_{0,1})/w_{0,0}(P_{1,0}-P_{0,1})` `+((2w_{1,0}w_{0,1})/w_{0,0} -w_{1,1})P_{0,0})`(4.26)
Рисунок 4.13 показывает, частные производные первого и второго порядка NURBS поверхности. Первые производные уменьшены на 1⁄2, а вторые производные уменьшены на 1⁄3.Рисунок 4.13. Частные производные первого и второго порядка бикубической поверхности NURBS, вычисленные при `u=`3⁄4 и `v=`1⁄4.
Теперь предположим, что `(u,v)` фиксированы, и что все производные `A^{(k,l)}`, `w^{(k,l)}` для `k,l≥0` и `0≤k+l≤d`, были вычислены и загружаются в массивы Aders и wders, соответственно. Алгоритм A4.4 вычисляет точку `S(u,v)` и производные `S^{(k,l)}(u,v)`, `0≤k+l≤d`. Bin[][] содержит предварительно вычисленные биномиальные коэффициенты.
RatSurfaceDerivs(Aders,wders,d,SKL) { /* Вычисляем производные S(u,v) */ /* Вход: Aders,wders,d */ /* Выход: SKL */ for (k=0; k<=d; k++) for (l=0; l<=d-k; l++) { v = Aders[k][l]; for (j=1; j<=l; j++) v = v - Bin[l][j]*wders[0][j]*SKL[k][l-j]; for (i=1; i<=k; i++) { v = v - Bin[k][i]*wders[i][0]*SKL[k-i][l]; v2 = 0.0; for (j=1; j<=l; j++) v2 = v2 + Bin[l][j]*wders[i][j]*SKL[k-i][l-j]; v = v - Bin[k][i]*v2; } SKL[k][l] = v/wders[0][0]; } }
Упражнения
`S^w(1/2,1/2)=1/4(P_{0,0}^w+P_{0,1}^w+P_{1,0}^w+P_{1,1}^w)=(1,1/2,9/4,5/4)`
Вычислите `S_u`(1⁄2,1⁄2), `S_v`(1⁄2,1⁄2),`S_{uv}`(1⁄2,1⁄2),`S_{u u}`(1⁄2,1⁄2).